package comvecspace.data.model.sql;

/**
 * SQL操作符
 */
public enum TSqlOperator {
	/**等于*/            opEqual,
	/**不等于*/            opNotEqual,
	/**包含 %abc%*/       opLike,
	/**左包含 abc%*/     opLeftLike,
	/**右包含 %abc*/     opRightLike,
	/**in 多个值用|分割，比如 a|b|c*/              opIn,
						opIsNull,
						opIsNotNull,
	/**大于*/            opGreater,
	/**小于*/            opLess,
	/**大于等于*/        opGreaterOrEqual,
	/**小于等于*/        opLessOrEqual,
	/**介于betwwen*/     opBetween;//不建议使用betwwen，因为不同的数据库对 BETWEEN...AND 操作符的处理方式是有差异的。某些数据库会列出介于 "Adams" 和 "Carter" 之间的人，但不包括 "Adams" 和 "Carter" ；某些数据库会列出介于 "Adams" 和 "Carter" 之间并包括 "Adams" 和 "Carter" 的人；而另一些数据库会列出介于 "Adams" 和 "Carter" 之间的人，包括 "Adams" ，但不包括 "Carter" 。
	@Override
	public String toString(){
		if(this == opEqual){
			return "equal";
		}else if(this == opNotEqual){
			return "notEqual";
		}else if(this == opLike){
			return "like";
		}else if(this == opLeftLike){
			return "llike";
		}else if(this == opRightLike){
			return "rlike";
		}else if(this == opIn){
			return "in";
		}else if(this == opGreater){
			return "greater";
		}else if(this == opLess){
			return "less";
		}else if(this == opGreaterOrEqual){
			return "greaterAndEqual";
		}else if(this == opLessOrEqual){
			return "lessAndEqual";
		}else if(this == opBetween){
			return "Between";
		}else if(this == opIsNull){
			return "IsNull";
		}else if(this == opIsNotNull){
			return "IsNotNull";
		}else {
			return "eq";
		}
	}
	
	public static TSqlOperator parseOf(String dataType){
		if(dataType == null) {
			return opEqual;
		}
		if(dataType.equalsIgnoreCase("eq")
			||dataType.equalsIgnoreCase("equal")
			||dataType.equalsIgnoreCase("equals")
			||dataType.equalsIgnoreCase("=")
			||dataType.equalsIgnoreCase("==")) {
			return opEqual;
		}
		else if(dataType.equalsIgnoreCase("<>") || dataType.equalsIgnoreCase("!=")
				||dataType.equalsIgnoreCase("notEq") ||dataType.equalsIgnoreCase("notEqual")) {
			return opNotEqual;
		}
		else if(dataType.equalsIgnoreCase("like")
			||dataType.equalsIgnoreCase("contains")) {
			return opLike;
		}
		else if(dataType.equalsIgnoreCase("llike")
				||dataType.equalsIgnoreCase("leftlike")) {
			return opLeftLike;
		}
		else if(dataType.equalsIgnoreCase("rlike")
				||dataType.equalsIgnoreCase("rightlike")) {
			return opRightLike;
		}
		else if(dataType.equalsIgnoreCase("in")
				||dataType.equalsIgnoreCase("exists") ) {
			return opIn;
		}
		else if(dataType.equalsIgnoreCase("greater")
				||dataType.equalsIgnoreCase(">")) {
			return opGreater;
		}
		else if(dataType.equalsIgnoreCase("less")
				||dataType.equalsIgnoreCase("<")) {
			return opLess;
		}
		else if(dataType.equalsIgnoreCase("greaterAndEqual")
				||dataType.equalsIgnoreCase(">=")) {
			return opGreaterOrEqual;
		}
		else if(dataType.equalsIgnoreCase("lessAndEqual")
				||dataType.equalsIgnoreCase("<=")) {
			return opLessOrEqual;
		}
		else if(dataType.equalsIgnoreCase("Between")) {
			return opBetween;
		}
		else if(dataType.equalsIgnoreCase("isNull")) {
			return opIsNull;
		}
		else if(dataType.equalsIgnoreCase("isNotNull")) {
			return opIsNotNull;
		}
		else {
			return opEqual;
		}
	}
}
